佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1008|回复: 12

用什么做primary key?

[复制链接]
发表于 19-4-2006 10:15 PM | 显示全部楼层 |阅读模式
请问各位大大,如果我做一个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?

谢谢各位大大前辈的意见!!
回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
如果是類似 invoice 的, 可以用 invoice no 來做 invoice header 的 pk
而 invoice no "-" item# (單上的第 # 個 item )或者 running no 來做 invoice details 的 pk

當然也有其他的選擇, 例如 date "-" item# ( 當天的第 0001 - 9999 個 item )


我的sales id应该就像invoice no般,可是我不大明白大大的所提供的意见,
可否说得简易和明白些,我的编程资历比较浅,对不起。。
谢谢大大


原帖由 Mr^MOon 于 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做pk的话,要是同一个client要买回同一个product的话,那pk不就会crash了?
回复

使用道具 举报

 楼主| 发表于 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 | 显示全部楼层
原帖由 simpleMind 于 20-4-2006 01:50 AM 发表


我的sales id应该就像invoice no般,可是我不大明白大大的所提供的意见,
可否说得简易和明白些,我的编程资历比较浅,对不起。。
谢谢大大





如果用client id和product id做pk的话,要是同 ...


怎样讲Crash呢?
要Transaction的话,involve一个table而已,就是sales。。
client & product Table 是储存Master data for transaction。。。

好的,如果我有client A, client B, product X, product Y.

  ------------
|client table|
  ------------
   
    client_id
    ----------
        A
        B


  ------------
|product table|
  -------------

    product_id
    -----------
        X
        Y


-----------
|sales table| (你也可以有sales_id在这个table)
-----------

sales_id    client_id     product id      Date
---------   ----------   -------------   --------
sales001       A              X          01/01/2006   
sales002       A              Y          01/01/2006
sales003       B              X          01/01/2006
sales004       B              Y          01/01/2006
sales005       A              X          01/02/2006 (代表A买回X)

(Correct me if i am wrong)

[ 本帖最后由 Mr^MOon 于 20-4-2006 02:49 AM 编辑 ]
回复

使用道具 举报

Follow Us
发表于 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,哈哈。。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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 ...


喔。。。我大概懂事什么了,会尝试去做

先谢谢各位大大的意见
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-9-2024 01:35 PM , Processed in 0.114557 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表