這裏的東西讓你開始...
- (P)指一個主鍵
- (F TABLE.COLUMN)是指一個外鍵和TABLE.COLUMN它應該指向到
我們需要一個表來存儲地址:客戶賬單地址,客戶發貨地址等
addresses
id unsigned int(P)
street1 varchar(75) // 123 South Main Street, etc.
street2 varchar(75) // Apt A, etc.
city_id unsigned int(F cities.id)
zip varchar(6) // 12345, A1A 1A1, etc. (CA, MX and US)
最好讓用戶從值列表中進行選擇,而不是讓他們自己鍵入值(即城市名稱)......
cities
id unsigned int(P)
state_id unsigned int(F states.id)
name varchar(50) // Omaha, Detroit, Tampa, etc.
再次,這是最好的從,而不是讓用戶輸入自己的價值...查看ISO 3166-1提供有效的值來選擇。
countries //
id char(2)(P) // CA, MX, US, etc.
iso3 char(3)(U) // CAN, MEX, USA, etc.
iso_num char(3)(U)
name varchar(50)(U) // Canada, Mexico, United States, etc.
你會想更多的信息添加到該表肯定,但這裏的一些列,讓你開始...看到PHP's crypt() function對於如何散列密碼。
customers
id unsigned int(P)
first_name varchar(50) // John, Mary, etc.
middle_name varchar(50) // Quincy, Louise, etc.
last_name varchar(50) // Doe, Public, etc.
email varchar(255) // [email protected], etc.
username varchar(32) // blahblah, etc.
password varbinary(255) // hashed
...
該表格將客戶連接到無限數量的地址。
customers_addresses
id unsigned int(P)
customer_id unsigned int(F customers.id)
address_id unsigned int(F addresses.id)
你會想更多的信息添加到該表,但這裏的一些列,讓你開始...
orders
id unsigned int(P)
created datetime // 2013-08-28 13:24:53, etc.
shipped datetime // 2013-08-28 15:12:10, etc.
customer_id unsigned int(F customer.id)
ship_address_id unsigned int(F addresses.id)
bill_address_id unsigned int(F addresses.id)
我們需要聯繫的一個訂單號到所有的都是產品的表每個訂單的一部分。
orders_products
id unsigned int(P)
order_id unsigned int(F orders.id)
product_id unsigned int(F products.id)
你會想更多的信息添加到該表,但這裏的一些列,讓你開始...
products
id unsigned int(P)
name varchar(50) // Widget A, Widget B, etc.
height unsigned int // height in inches, centimeters, whatever.
width unsigned int // width in inches, centimeters, whatever.
depth unsigned int // depth in inches, centimeters, whatever.
weight double // weight in ounces, pounds, grams, kilograms, whatever.
像城市和國家,讓用戶從選擇列表中進行選擇,而不是輸入可能不好的數據。見ISO 3166-2。
states
id unsigned int(P)
country_id char(2)(F countries.id)
code char(2) // AL, NF, NL, etc.
name varchar(50) // Alabama, Newfoundland, Nuevo León, etc.
thnx爲詳細示例,非常有幫助(!!) – Joppo
PS:關於您的示例,還有一個(初學者)問題:您爲什麼選擇將客戶地址信息放在單獨的表格中而不是表格客戶中? – Joppo
@ user2543182 - 因爲他們可能會給我們1,2,... N個地址隨着時間的推移。也許他們想要一些東西運到他們的房子,也許他們希望運送到他們的工作。也許到他們堂兄的家......如果我們給自己存儲所有這些地址的機會,那麼我們可以讓客戶看到他們使用過的所有過去地址的列表,並讓他們選擇他們想要用於當前訂單。 –