查看: 1008|回复: 12
|
用什么做primary key?
[复制链接]
|
|
请问各位大大,如果我做一个selling system,要蓄存sales record,record里要有什么data呢?
我大致上懂需要有,client id,product id,product description,sales date,quantity,sales price,total,sales id等,还需要什么data吗?
如果只是酱的话,要用什么做primary key呢?
是不是composite primary key来的呢?如:client id + product id或sales id + product id或
client id + sales id或client id + sales id + product id?
谢谢各位大大前辈的意见!! |
|
|
|
|
|
|
|
发表于 20-4-2006 12:39 AM
|
显示全部楼层
如果是類似 invoice 的, 可以用 invoice no 來做 invoice header 的 pk
而 invoice no "-" item# (單上的第 # 個 item )或者 running no 來做 invoice details 的 pk
當然也有其他的選擇, 例如 date "-" item# ( 當天的第 0001 - 9999 個 item ) |
|
|
|
|
|
|
|
发表于 20-4-2006 12:45 AM
|
显示全部楼层
是我的話,會分去3個table.
Client, Product, Sales.
Sales應該是Composite Entity.
Client - client_id(pk), client_name, .......
Product - product_id(pk), product_name,....
Sales - client_id, product_id
Sales應該不用放PK...
我也是菜鳥,不懂對不對。。 |
|
|
|
|
|
|
|
楼主 |
发表于 20-4-2006 01:50 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 20-4-2006 02:00 AM
|
显示全部楼层
原帖由 flashang 于 20-4-2006 12:39 AM 发表
如果是類似 invoice 的, 可以用 invoice no 來做 invoice header 的 pk
而 invoice no "-" item# (單上的第 # 個 item )或者 running no 來做 invoice details 的 pk
當然也有其他的選擇, 例如 dat ...
大大的意思是不是在sales record的sales id field里放invoice no "-" item#呢?
列如:
salesID(pk) clientID productID
------------- ----------- -----------
1234-item#1 100092 0321421
1234-item#2 100092 0543211
1235-item#1 100034 0343254
: : :
还是别的意思呢? |
|
|
|
|
|
|
|
发表于 20-4-2006 02:46 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 20-4-2006 06:50 AM
|
显示全部楼层
我想flashang提的应该是以类似这个为基础的:
product,client,invoice,invoiceItem |
|
|
|
|
|
|
|
楼主 |
发表于 20-4-2006 12:58 PM
|
显示全部楼层
原帖由 Mr^MOon 于 20-4-2006 02:46 AM 发表
怎样讲Crash呢?
要Transaction的话,involve一个table而已,就是sales。。
client & product Table 是储存Master data for transaction。。。
好的,如果我有client A, client B, pr ...
因为Mr^MOon你说在sales table用client id和product id做pk,那要在sales table做什么都以client id和product id来retrieve data,换句话说就是client id和product id的组合一定要distinctive,不能duplicate。。
如果同一个client要买回同一种product,那当输入data时,database在sales table里create record时,不就会create多一个duplicate的composite pk?那就crash了阿。。
原来你是说再sales table加多一个sales id以它作为pk,哈哈。。 |
|
|
|
|
|
|
|
楼主 |
发表于 20-4-2006 01:04 PM
|
显示全部楼层
原帖由 astral 于 20-4-2006 06:50 AM 发表
我想flashang提的应该是以类似这个为基础的:
product,client,invoice,invoiceItem
这个基础我有看过可是没试过,感觉好像有点复杂。。
有点不明白,哈哈。。 |
|
|
|
|
|
|
|
发表于 20-4-2006 03:59 PM
|
显示全部楼层
简单些,可用一个 Primary Key 和 Foreign Key.
如:
SALES_ID/INVOICE_NO as primary key
如果个人需要可以把 CLIENT_ID或其他的 key as FOREIGN KEY
如果是我, 我会 auto generate SALES_ID/INVOICE_NO 避免重复 (PRIMARY KEY RESTRICT DUPLICATE DATA)
EG:
SALES_ID CLIENT_ID PRODUCT_ID DATE
----------- ---------- ------------- --------
A000000001 CLIENT-ABC P-XYZ 01/01/2006
A000000002 CLIENT-DEF P-KMN 01/01/2006
:
:
A999999999 CLIENT-GHI P-WXY 01/01/2006
B000000001 CLIENT-JKM P-XYZ 01/01/2006
:
:
B999999999 CLIENT-DEF P-XYZ 02/01/2006
C000000001 CLIENT-GHI P-XYZ 02/01/2006
:
:
C999999999 CLIENT-JKM P-XYZ 02/01/2006
注: 如果不知道如何把 alphabet 方在前面的话可以避免他, 但 make sure database 的号码够用
[ 本帖最后由 heng81 于 20-4-2006 04:09 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 20-4-2006 05:53 PM
|
显示全部楼层
原帖由 heng81 于 20-4-2006 03:59 PM 发表
简单些,可用一个 Primary Key 和 Foreign Key.
如:
SALES_ID/INVOICE_NO as primary key
如果个人需要可以把 CLIENT_ID或其他的 key as FOREIGN KEY
如果是我, 我会 auto generate SALES_ID/INVOICE_NO 避 ...
这就是我要讲的。。呵呵。。
要加Alpabet,就要做一个function了。。
不会很难的。。 |
|
|
|
|
|
|
|
发表于 20-4-2006 09:27 PM
|
显示全部楼层
原帖由 astral 于 20-4-2006 06:50 AM 发表
我想flashang提的应该是以类似这个为基础的:
product,client,invoice,invoiceItem
簡單的做法
product
productID PK
client
clientID PK
invoice
invoiceNo PK
clientID FK client.clientID
invoiceItem
UID PK
invoiceNo FK invoice.invoiceNo
productID FK productID PK
其他的可以自由發揮
[ 本帖最后由 flashang 于 20-4-2006 09:30 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 21-4-2006 02:35 AM
|
显示全部楼层
原帖由 flashang 于 20-4-2006 09:27 PM 发表
簡單的做法
product
productID PK
client
clientID PK
invoice
invoiceNo PK
clientID FK client.clientID
invoiceItem
UID PK
invoiceN ...
喔。。。我大概懂事什么了,会尝试去做
先谢谢各位大大的意见 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|