SlideShare une entreprise Scribd logo
1  sur  70
Postgresql	thực	tế
Vấn	đề	thực	tế	trường	không	dạy
cuong@techmaster.vn
http://techmaster.vn
Cài	đặt
Mac	OS
https://postgresapp.com/
docker run --name db -p 5432:5432 -e
POSTGRES_PASSWORD=abc -d postgres:9.6.1-alpine
Tốt	nhất	là	chạy	docker	bộ	cài	chuẩn	Postgresql	Alpine	Linux
1. Cài	docker
2. Trên	terminal,	gõ	lệnh	dưới	đây
Kết	nối
Command	line	tool
psql -h payroll -U postgres -d payroll –W
pgcli -h payroll -U postgres -W -d dvdrental
# brew install pgcli
Học	chi	tiết
• http://www.postgresqltutorial.com/
• Trouble Shooting Postgresql của Hans-Jurgen
Schonig
• SQL Antipatterns: Avoiding the Pitfalls of
Database Programming của Bill Karwin
• Postgresql official document
Quy	ước	đặt	tên	bảng,	cột
• Luôn	dùng	chữ	thường,	số	ít
• Tránh	tên	bảng	trùng	keyword
order,	user
Chú	ý	không	dẫm	phải	cứt
https://www.postgresql.org/docs/current/static/sql-keywords-appendix.html
Từ thay	thế
order purchase, buy
user person
default defaults
except exception
Code	gọn	hơn
TABLE film;
SELECT * FROM film;
Ngắn	hơn
TABLE film LIMIT 10;
CREATE TABLE demo.item
(
id bigint default util.id_generator(),
title text,
CONSTRAINT item_pkey PRIMARY KEY (id)
);
CREATE TABLE demo.item
(
id bigint default util.id_generator() PRIMARY KEY,
title text,
);
Ngắn	hơn	!
CREATE TABLE item_variant
(
id bigint default util.id_generator() PRIMARY KEY,
item_id bigint NOT NULL REFERENCES item(id),
)
CREATE TABLE item_variant
(
id bigint default util.id_generator() PRIMARY KEY,
item_id bigint NOT NULL,
FOREIGN KEY (item_id) REFERENCES item(id)
)
Ngắn	hơn
Thay	vì	chỉ	dùng	duy	nhất	1	schema	public
• Hãy phân tách schema nhóm các bảng lại.
• Trong tương lai nếu tách ra các microservice thì
schema dùng để tách bảng
CREATE SCHEMA 'user’;
SET SCHEMA 'user';
Liên	kết	bảng	căn	bản
Mẫu	đã	biết	học	ở	trường
• 1 : nhiều
• 1 : 1
• nhiều : nhiều
• đa cấp - recursive
• compose vs reference
Mèo	chết,	chân	có	tự	tồn	tại	được	không?
ERD	Annotation	chú	thích	quan	hệ	giữa	các	bảng
Một	môn	học	có	nhiều	học	viên	theo	học
Một	học	viên	có	thể	học	vài	môn	học
Một	nhân	viên	báo	cáo	nhiều	sếp
Self	reference	Many	:	many
Liên	kết	bảng	nâng	cao
• Kế thừa 1 bảng – single table inheritance
• Kế thừa nhiều bảng – multiple table inheritance
------------------------------------------------
• Liên kết đa hình - polymorphism association
• Product item variant
• EAV
Single	Table	Inheritance
dư	thừa	dữ	liệu,	liên	tục
mở	rộng	cột
Chỉ	có	1	số	loại	CSDL	hỗ	trợ	Table	Inheritance
Nếu	không	hỗ	trợ	sử	dụng	quan	hệ	1:1	thay	thế
CREATE TABLE animal (
id serial,
name text
);
CREATE TABLE cow (
is_meat_cow BOOLEAN,
is_milk_cow BOOLEAN
) INHERITS animal;
MySQL	dùng	quan	hệ	1:1	thay	thế	cho	inheritance
Thiết	kế	bảng	web	site	thương	mại	
điện	tử
• Data chi phối Meta Data
– Một đơn hàng có nhiều phương pháp thanh toán
• Dữ liệu khó chuẩn hóa
– Chủng loại mặt hàng lớn. Mỗi mặt hàng có nhiều
thuộc tính khác nhau
• Temporal data
– Thuộc tính của bản ghi, tập bản ghi thay đổi theo thời
gian
Thanh	toán	đơn	hàng	
thanh	toán	bằng	1	trong	4	
cách.	
Polymorphism	
Association
Không	dùng	foreign	key	vì	
foreign	chỉ	chiếu	đến	1!	
bảng
Đầu	vào	là	id	làm	sao	chọn	đúng	bảng	truy	vấn?
Có	id	sẽ	suy	ra	được	type,	có	type	suy	ra	được	bảng?
Dạng	cột	trả	về	sẽ	tùy	thuộc	payment.type
Kế	thừa
Giải	pháp
”Data decides metadata” ~ dữ liệu chi phối
cấu trúc dữ liệu
• Khó có thể chỉ viết 1 câu lệnh SQL
• Viết logic chọn bảng ở PHP, Node.js, Python…
• Viết function trực tiếp trong Postgresql
Giao	diện	hiển	thị	cũng	sẽ	phải	động	theo
từng	kiểu	thanh	toán
React,	Vue.js	!
Một	sản	phẩm	có	nhiều	biến	thể
Coi	là	2	sản	phẩm	có	
mã	khác	nhau
Một	mặt	hàng	có	lựa	chọn	
màu	sắc	và	kích	cỡ
Giá	tùy	biến	theo	lựa	chọn
Tách biệt mã hàng
• Tiện cho lập trình, quản lý
• Mất công gõ lại mô tả sản
phẩm
• Khó cho khách hàng so
sánh, tùy chỉnh
Một mã hàng nhiều lựa chọn
• Phức tạp khi lập trình, quản lý
• Tái sử dụng thông tin chung
• Dễ cho khách hàng so sánh,
tùy chỉnh
item.title	=	"Polo	shirt"	->	options	=	{"size":	"M",	"color":		"red"}
item.title	=	"iPhone	7”	->	options	=	{"mem":	"32G",	"color":	"rose"}
Một	sản	phẩm	thực	sự	cần	2	key:	item.id và	variant.id để	xác	định
Dữ	liệu	khó	chuẩn	hóa
Chủng	loại	mặt	hàng	lớn.	Mỗi	mặt	hàng	có	nhiều	thuộc	
tính	khác	nhau	~	Single	Table	Inheritance
Cột	sẽ	mở	rộng	không	ngừng,	Null	xuất	hiện	rất	nhiều
Tách	2	bảng
Entity Attributes	- Values
Tách	thành	3	bảng
Phức	tạp,	kiểu	lỏng	lẻo.	Mô	hình	này	Magento	đang	dùng
EAV	– Entity	– Attribute	- Value
• Đảm bảo không dư thừa dữ liệu
• Không gia tăng cột
• Phức tạp, join bảng lằng nhằng
• Kiểu dữ liệu lỏng lẻo
Lu
Thuộc	tính	chuyên	biệt	được	lưu	trong	JSONB.	Mềm	
dẻo	chấp	tất	!
Index	được,	truy	vấn	được,	chậm	hơn	kiểu	căn	bản
Làm	sao	để	kiểm	tra	cấu	trúc	dữ	liệu	khi	lưu	JSON
JSON	có	JSON	Schema	http://json-schema.org/
Dữ	liệu	thay	đổi	theo	thời	gian
temporal	data
Dữ	liệu
thay	đổi	theo	
thời	gian
Bản	ghi	chỉ	lưu	
trạng	thái
cuối	cùng
Temporal	Data CRUD
• Tỷ	giá	đổi	tiền	thay	đổi	từng	giờ
• Chỉ	số	chứng	khoán	thay	đổi	từng	phút
• Giá	mặt	hàng
• Số	lượng	học	viên	đi	học	thay	đổi	từng	buổi
Lưu	log	thay	đổi	vào	1	trường	JSON	trong	chính	bảng	đó
Lưu	log	thay	đổi	vào	1	bảng	riêng
Event	Sourcing
Lưu tất cả các sự kiện lên đối tượng và play back
lại
https://ookami86.github.io/event-sourcing-in-practice/
https://msdn.microsoft.com/en-us/library/dn589792.aspx
Đang thử nghiệm chưa dám phán, đối với 1 đơn
hàng, thay đổi < 20 sự kiện, thời gian playback lại
sẽ nhanh
Các	câu	hỏi	đặt	ra	với	Event	Sourcing
• Event Source khác hẳn với CRUD, các constrain ràng buộc PK-FK còn áp dụng
được hay không
• Khi một đối tượng ràng buộc quan hệ với nhiều đối tượng hay tập khác (1:1,
1:nhiều, nhiều nhiều), việc lưu event tác động lên đối tượng đó sẽ dẫn theo
một loạt event lên nhiều đối tượng khác => xử lý transaction thế nào, thứ tự
trước sau….
• Pattern Event Sourcing có vẻ hay nhưng không dễ áp dụng !
Tối	ưu	tốc	độ
Sinh	dữ	liệu	giả
• https://www.mockaroo.com
EXPLAIN (ANALYZE, FORMAT JSON) SELECT * FROM
demo.t_test WHERE id = 124123;
+--------------+
| QUERY PLAN |
|--------------|
| [
{
"Plan": {
"Node Type": "Seq Scan",
"Relation Name": "t_test",
"Alias": "t_test",
"Startup Cost": 0.00,
"Total Cost": 16925.00,
"Plan Rows": 1,
"Plan Width": 4,
"Actual Startup Time": 7.123,
"Actual Total Time": 55.906,
"Actual Rows": 1,
"Actual Loops": 1,
"Filter": "(id = 124123)",
"Rows Removed by Filter": 999999
},
"Planning Time": 0.030,
"Triggers": [
],
"Execution Time": 55.939
}
] |
+--------------+
http://tatiyants.com/pev
SELECT a.first_name || ' ' || a.last_name AS fullname,
f.title FROM actor AS a
JOIN film_actor AS fa ON fa.actor_id = a.actor_id
JOIN film AS f ON f.film_id = fa.film_id
ORDER BY fullname;
CREATE INDEX idx_title ON public.film
USING btree
(title COLLATE pg_catalog."default”
varchar_pattern_ops)
Tốc	độ	8	lần
SELECT title FROM film WHERE title LIKE 'Bea%';
Không	có	index	trường	email
EXPLAIN (ANALYZE, FORMAT JSON) SELECT * FROM person
WHERE lower(email) = 'adunn6@zdnet.com';
Sequential	Scan,	Execution	time:	2.91
Duyệt	tuần	tự,	lower	case	từng	email,	so	sánh
Index	lower(email)
Execution	time	0.051,	nhanh	hơn	57	lần
CREATE INDEX lower_email_idx ON person
(lower(email));
Sử	dụng	EXTENSION
SELECT * FROM pg_available_extensions;
+--------------------+----------------------------------------------------------------------+
| name | comment |
|--------------------+----------------------------------------------------------------------|
| file_fdw | foreign-data wrapper for flat file access |
| dict_xsyn | text search dictionary template for extended synonym processing |
| refint | functions for implementing referential integrity (obsolete) |
| postgres_fdw | foreign-data wrapper for remote PostgreSQL servers |
| pgrowlocks | show row-level locking information |
| btree_gin | support for indexing common datatypes in GIN |
| tsm_system_time | TABLESAMPLE method which accepts time in milliseconds as a limit |
| intagg | integer aggregator and enumerator (obsolete) |
| pg_prewarm | prewarm relation data |
| pg_trgm | text similarity measurement and index searching based on trigrams |
| pg_stat_statements | track execution statistics of all SQL statements executed |
| moddatetime | functions for tracking last modification time |
| fuzzystrmatch | determine similarities and distance between strings |
| seg | data type for representing line segments or floating-point intervals |
| pg_buffercache | examine the shared buffer cache |
| dict_int | text search dictionary template for integers |
| pageinspect | inspect the contents of database pages at a low level |
| timetravel | functions for implementing time travel |
| tablefunc | functions that manipulate whole tables, including crosstab |
| ltree | data type for hierarchical tree-like structures |
+--------------------+----------------------------------------------------------------------+
| name | comment |
|--------------------+----------------------------------------------------------------------|
| pgstattuple | show tuple-level statistics |
| hstore | data type for storing sets of (key, value) pairs |
| cube | data type for multidimensional cubes |
| btree_gist | support for indexing common datatypes in GiST |
| pgcrypto | cryptographic functions |
| earthdistance | calculate great-circle distances on the surface of the Earth |
| dblink | connect to other PostgreSQL databases from within a database |
| plpgsql | PL/pgSQL procedural language |
| isn | data types for international product numbering standards |
| insert_username | functions for tracking who changed a table |
| tcn | Triggered change notifications |
| intarray | functions, operators, and index support for 1-D arrays of integers |
| sslinfo | information about SSL certificates |
| tsm_system_rows | TABLESAMPLE method which accepts number of rows as a limit |
| pg_freespacemap | examine the free space map (FSM) |
| lo | Large Object maintenance |
| chkpass | data type for auto-encrypted passwords |
| autoinc | functions for autoincrementing fields |
| citext | data type for case-insensitive character strings |
| adminpack | administrative functions for PostgreSQL |
| unaccent | text search dictionary that removes accents |
| tsearch2 | compatibility package for pre-8.3 text search functions |
+--------------------+----------------------------------------------------------------------+
SELECT * FROM pg_available_extensions;
CREATE EXTENSION pg_trgm;
Distance between
two words
SELECT 'hanoi' <-> 'Ha Noi'; 0.555556
SELECT 'hanoi' <-> 'Ha loi'; 0.7
SELECT 'hanoi' <-> 'Hanoi'; 0.0
SELECT 'hanoi' <-> 'hà nội'; 0.916667
CREATE EXTENSION ltree;
https://www.postgresql.org/docs/9.6/static/ltree.html
CREATE EXTENSION unaccent;
SELECT unaccent('Hà nội')
+------------+
| unaccent |
|------------|
| Ha noi |
+------------+
À A
Á A
 A
à A
Ä A
Å A
à a
ộ o
Địa	chỉ	bằng	tiếng	Việt	có	quá	nhiều	biến	thể,	unaccent	giúp	bỏ	dấu

Contenu connexe

Tendances

ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
guest717ec2
 
07 chương 5. lý thuyết số (2)
07  chương 5. lý thuyết số (2)07  chương 5. lý thuyết số (2)
07 chương 5. lý thuyết số (2)
Andy Nhân
 
91684060 356-cau-trắc-nghiệm-csdl-2
91684060 356-cau-trắc-nghiệm-csdl-291684060 356-cau-trắc-nghiệm-csdl-2
91684060 356-cau-trắc-nghiệm-csdl-2
tranquanthien
 
BGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tínhBGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tính
Cao Toa
 

Tendances (20)

Đề tài: Xây dựng phần mềm quản lý quán cà phê, HOT, 9đ
Đề tài: Xây dựng phần mềm quản lý quán cà phê, HOT, 9đĐề tài: Xây dựng phần mềm quản lý quán cà phê, HOT, 9đ
Đề tài: Xây dựng phần mềm quản lý quán cà phê, HOT, 9đ
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
 
07 chương 5. lý thuyết số (2)
07  chương 5. lý thuyết số (2)07  chương 5. lý thuyết số (2)
07 chương 5. lý thuyết số (2)
 
Thuật toán minimax game tìm kiếm đối kháng
Thuật toán minimax   game tìm kiếm đối khángThuật toán minimax   game tìm kiếm đối kháng
Thuật toán minimax game tìm kiếm đối kháng
 
Sapo Microservices Architecture
Sapo Microservices ArchitectureSapo Microservices Architecture
Sapo Microservices Architecture
 
Công cụ tạo mã nguồn mở BlueFish
Công cụ tạo mã nguồn mở BlueFishCông cụ tạo mã nguồn mở BlueFish
Công cụ tạo mã nguồn mở BlueFish
 
Hệ mật mã elgamal
Hệ mật mã elgamalHệ mật mã elgamal
Hệ mật mã elgamal
 
Thuật toán K mean
Thuật toán K meanThuật toán K mean
Thuật toán K mean
 
91684060 356-cau-trắc-nghiệm-csdl-2
91684060 356-cau-trắc-nghiệm-csdl-291684060 356-cau-trắc-nghiệm-csdl-2
91684060 356-cau-trắc-nghiệm-csdl-2
 
Phân tích thiết kế hệ thống quản lý bán nước giải khát
Phân tích thiết kế hệ thống quản lý bán nước giải khátPhân tích thiết kế hệ thống quản lý bán nước giải khát
Phân tích thiết kế hệ thống quản lý bán nước giải khát
 
Đề tài: Hệ thống giám sát mạng dựa trên phần mềm Zabbix, 9đ
Đề tài: Hệ thống giám sát mạng dựa trên phần mềm Zabbix, 9đĐề tài: Hệ thống giám sát mạng dựa trên phần mềm Zabbix, 9đ
Đề tài: Hệ thống giám sát mạng dựa trên phần mềm Zabbix, 9đ
 
Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm Mô hình hóa dữ liệu mức quan niệm
Mô hình hóa dữ liệu mức quan niệm
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logic
 
Đề tài: Thuật toán khai phá dữ liệu trong quản lý địa chỉ Internet
Đề tài: Thuật toán khai phá dữ liệu trong quản lý địa chỉ InternetĐề tài: Thuật toán khai phá dữ liệu trong quản lý địa chỉ Internet
Đề tài: Thuật toán khai phá dữ liệu trong quản lý địa chỉ Internet
 
Evolution of MySQL Parallel Replication
Evolution of MySQL Parallel Replication Evolution of MySQL Parallel Replication
Evolution of MySQL Parallel Replication
 
BGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tínhBGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tính
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
 
Hệ mật mã Mekle-Hellman
Hệ mật mã Mekle-HellmanHệ mật mã Mekle-Hellman
Hệ mật mã Mekle-Hellman
 
Mã hóa đường cong Elliptic
Mã hóa đường cong EllipticMã hóa đường cong Elliptic
Mã hóa đường cong Elliptic
 
Bài tập-des
Bài tập-desBài tập-des
Bài tập-des
 

Similaire à Postgresql các vấn đề thực tế

Quản lý dự án phần mềm dasssssssssaasdasdasd
Quản lý dự án phần mềm dasssssssssaasdasdasdQuản lý dự án phần mềm dasssssssssaasdasdasd
Quản lý dự án phần mềm dasssssssssaasdasdasd
LNhtQuang11
 
DoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfDoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdf
TamDo58
 
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Tan Ngoc
 
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớnCode Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Nhật Nguyễn Khắc
 

Similaire à Postgresql các vấn đề thực tế (20)

Itlc2015
Itlc2015Itlc2015
Itlc2015
 
Go micro framework to build microservices
Go micro framework to build microservicesGo micro framework to build microservices
Go micro framework to build microservices
 
Basic C programming
Basic C programmingBasic C programming
Basic C programming
 
Golang web database3
Golang web database3Golang web database3
Golang web database3
 
LINQ
LINQLINQ
LINQ
 
05_Project_management.ppt
05_Project_management.ppt05_Project_management.ppt
05_Project_management.ppt
 
Quản lý dự án phần mềm dasssssssssaasdasdasd
Quản lý dự án phần mềm dasssssssssaasdasdasdQuản lý dự án phần mềm dasssssssssaasdasdasd
Quản lý dự án phần mềm dasssssssssaasdasdasd
 
Python moi
Python moiPython moi
Python moi
 
DoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdfDoThanhNghi2016_Python.pdf
DoThanhNghi2016_Python.pdf
 
Python Beginner Class day-11-12-13-database
Python Beginner Class day-11-12-13-databasePython Beginner Class day-11-12-13-database
Python Beginner Class day-11-12-13-database
 
KyngheYC_Requirements 18.pptx
KyngheYC_Requirements 18.pptxKyngheYC_Requirements 18.pptx
KyngheYC_Requirements 18.pptx
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programming
 
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
Thiet ke-he-thong-nhung -chuong-6-(p3)-tong-hop-phan-cung-va-phan-mem - [cuud...
 
Lập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biếnLập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biến
 
C đến C++ phần 1
C đến C++ phần 1C đến C++ phần 1
C đến C++ phần 1
 
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớnCode Refactoring: Thay đổi nhỏ - Lợi ích lớn
Code Refactoring: Thay đổi nhỏ - Lợi ích lớn
 
Lập trình web – cgi
Lập trình web – cgiLập trình web – cgi
Lập trình web – cgi
 
Chuong2 nmth
Chuong2 nmthChuong2 nmth
Chuong2 nmth
 
Trần Anh Khoa - Kautilya và Powershell trong kỹ thuật tấn công tiếp cận
Trần Anh Khoa - Kautilya và Powershelltrong kỹ thuật tấn công tiếp cậnTrần Anh Khoa - Kautilya và Powershelltrong kỹ thuật tấn công tiếp cận
Trần Anh Khoa - Kautilya và Powershell trong kỹ thuật tấn công tiếp cận
 
Node.js căn bản
Node.js căn bảnNode.js căn bản
Node.js căn bản
 

Plus de TechMaster Vietnam

Plus de TechMaster Vietnam (20)

Neural Network from Scratch
Neural Network from ScratchNeural Network from Scratch
Neural Network from Scratch
 
Flutter vs React Native 2018
Flutter vs React Native 2018Flutter vs React Native 2018
Flutter vs React Native 2018
 
Control structure in C
Control structure in CControl structure in C
Control structure in C
 
Authentication and Authorization
Authentication and AuthorizationAuthentication and Authorization
Authentication and Authorization
 
Postgresql security
Postgresql securityPostgresql security
Postgresql security
 
Knex Postgresql Migration
Knex Postgresql MigrationKnex Postgresql Migration
Knex Postgresql Migration
 
Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
Minimum Viable Products
Minimum Viable ProductsMinimum Viable Products
Minimum Viable Products
 
Chia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTTChia sẻ kinh nghiệm giảng dạy CNTT
Chia sẻ kinh nghiệm giảng dạy CNTT
 
Cơ sở dữ liệu postgres
Cơ sở dữ liệu postgresCơ sở dữ liệu postgres
Cơ sở dữ liệu postgres
 
Tìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tớiTìm nền tảng lập trình cho 5 năm tới
Tìm nền tảng lập trình cho 5 năm tới
 
iOS Master - Detail & TabBar
iOS Master - Detail & TabBariOS Master - Detail & TabBar
iOS Master - Detail & TabBar
 
Phalcon căn bản
Phalcon căn bảnPhalcon căn bản
Phalcon căn bản
 
Phalcon introduction
Phalcon introductionPhalcon introduction
Phalcon introduction
 
Slide that wins
Slide that winsSlide that wins
Slide that wins
 
Manage your project differently
Manage your project differentlyManage your project differently
Manage your project differently
 
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSXHướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
Hướng dẫn sử dụng CocoaPods trong dự án iOS hoặc MacOSX
 
Day0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOSDay0: Giới thiệu lập trình ứng dụng Apple iOS
Day0: Giới thiệu lập trình ứng dụng Apple iOS
 
Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012Bài trình bày cho sinh viên Bách Khoa 9/2012
Bài trình bày cho sinh viên Bách Khoa 9/2012
 
Making a living
Making a livingMaking a living
Making a living
 

Postgresql các vấn đề thực tế