作者bobju (宝贝猪)
看板Database
标题Re: [SQL ]规划资料表问题
时间Tue Feb 24 23:44:47 2009
资料关联图:
客户(1)<=(n)订单(1)<=(n)订单明细(n)=>(1)产品
以阶层表示法再画一遍 :9
(n)+=>(1)产品
订单明细--+
(n)+=>(1)订单(n)+
+=>(1)客户
1. 一个客户可以下多张订单, 而一张订单同时仅能属於一个客户,
所以客户对订单的数量关系是1对n, 而且订单必须一定要有客户,
所以以 客户<=订单 代表'完全依附'的关联.
2. 一张订单可以包括多笔订单明细, 而一笔订单明细同时仅能属於一张订单,
所以订单对明细的数量关系是1对n, 而且明细必须一定要有订单,
所以以 订单<=订单明细 代表'完全依附'的关联.
3. 一笔订单明细就只记录一个产品, 而一个产品可以被多笔订单明细所记录,
所以明细对产品的数量关系是n对1, 而且明细必须一定要记录产品,
所以以 订单明细=>产品 代表'完全依附'的关联.
data schema:
客户: ClientID,Name,etc..
^主
+---------+
|外
订单: OrderID,OwnerID,OrderDate,OrderNum,etc..
^主
+-----------+
|外
订单明细: ItemID, OrderID, Idx, ProdID, Qty, Price,etc..
|外
+------------------------+
v主
产品: ProductID, Name, etc..
订单明细的Idx代表订单项次, 另外, 应该要有单价比较合理,
所以补上Price.
至於文中的'主键'不该只有一个, 不太确定是指什麽意思, 不过'主键'
跟'外键'的观念要分清楚. 一般是'外键'联结'主键'才有意义.
※ 引述《kucom (kucom)》之铭言:
: 今天面试 一题写错 想请问大家解题...
: 一张订单可以订很多产品,以下有这些资讯,如何规画资料表及主键
: 订单编号,订单项次,产品编号,订购数量,订购人,订购日期
: 我是写:
: TABLE A TABLE B
: OrderID OrderNum OrderOwner OrderDate OrderNum ProdID Qty
: ------- -------- --------
: 主键 |____________________________________| 主键
: 相关连
这里补充一下: 如果TABLE B是订单明细的话, 那麽必须
OrderNum(订单编号),ProdID(产品id),Idx(订单明细项次)
三者同时呈列才能够用来识别一笔订单明细, 这才能够拿来当做订单明细的主键.
你在文中在TABLE B的OrderNum标示为主键是错误的. 它是'外键', 用来与订单
的主键OrderNum连结.
: 面试的主管说我写错了,主键不该只有一个
: 请问这题如何写才正确,谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.84.3
※ 编辑: bobju 来自: 211.74.84.3 (02/25 00:16)
1F:推 kucom:懂了,受益良多! 谢谢! 02/25 09:20