ここから始めましょう...
- (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 の crypt() 関数を参照してください。
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) // me@privacy.com, 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.