2

如果我走在正确的轨道上,请指导我。

我正在尝试Mobile Bill为一个人创建数据库架构以及X如何为表定义。PKFKBill_Detail_Lines

以下是假设:

  1. 每个客户都有一个唯一的关系编号。
  2. Bill_no将是独一无二的,因为它每个月都会生成。
  3. X每个月都可以拨打同一个手机号码。
  4. Account_no与每个手机号码相关联并且它不会改变。

架构:

table: Bill_Headers

Relationship_no    - int, NOT NULL , PK
Bill_no            - int, NOT NULL , PK
Bill_date          - varchar(255), NOT NULL
Bill_charges       - int, NOT NULL

table: Bill_Detail_Lines

Account_no    - int, NOT NULL
Bill_no       - int, NOT NULL , FK
Relationship_no - int, NOT NULL, FK
Phone_no      - int, NOT NULL
Total_charges  - int

table: Customers

Relationship_no    - int, NOT NULL, PK
Customer_name      - varchar(255)
Address_line_1     - varchar(255) 
Address_line_2     - varchar(255) 
Address_line_3     - varchar(255) 
City               - varchar(255)
State              - varchar(255)
Country            - varchar(255)
4

4 回答 4

0

我建议为Bill_Detail_Lines. 如果每一行代表对给定号码进行的所有呼叫的总和,那么自然 PK 似乎是(Relationship_no, Bill_no, Phone_no),或者可能是(Relationship_no, Bill_no, Account_no)

如果每一行都代表一个调用,那么我可能会添加一Line_no列并制作 PK (Relationship_no, Bill_no, Line_no)

于 2011-07-13T12:55:07.957 回答
0

是的,就我而言,一切看起来都很好。

于 2011-07-13T11:34:07.210 回答
0

有几个错误:

  1. Realtionship_no 和 Bill_no 是整数。确保条目在整数范围内。最好将它们作为 varchar() 或 char()

  2. Bill_date 应该是数据类型 Date

  3. 在表 Bill_Detail_Lines 中,最好将 Account_no 设置为 varchar() 或 char(),因为帐号很长。Phone_no 也是如此。

您的客户表一切正常,只是您将 varchar() 大小设置为 255 的 City State 和 Country 太大了。您也可以使用较小的尺寸。

于 2011-07-13T11:47:36.060 回答
0

我不得不不同意,有几个“标准”没有被遵循。是的,设计看起来不错,但命名约定不合适。

首先,表名应该是单数的(很多人会不同意这一点)。

如果你有一个单一的 int, PK 在一个表上,标准是称之为'ID',因此你有“SELECT Customer.ID FROM Customer” - 例如。然后,您还可以完全限定 FK 列,例如:Bill_Headers 上的 CustomerID 而不是 Relationship_no,然后您必须检查表定义以记住它与什么相关。

我也一直牢记在心,就是在不混淆名称的情况下使列标题尽可能清晰和简短。例如,Bill_Headers 上的“Bill_charges”可能只是“Charges”,因为您已经在 Bill_Header(s) 上(<- 该死的 's'),日期也是如此,但日期可能更具描述性, CreatedDate、LastUpdatedDate 等...

最后,注意硬编码多个列就足够了,反之亦然。具体来说,我在谈论:

Address_line_1 - varchar(255) Address_line_2 - varchar(255) Address_line_3 - varchar(255)

这会导致以后头疼。SQL 确实能够在字符串中存储换行符,因此将它们组合到一个“地址 - varchar(8000)”将是最简单的。理想情况下,这将在一个单独的表中,使用 int "CustomerID - int PK FK" 列将其命名为 Customer_Address,您可以在其中输入特定信息。

请记住,这些只是建议,因为没有每个人都应该遵循的单一数据库设计方法。这些是最佳实践,归根结底是您自己的决定。

于 2011-07-13T11:47:39.337 回答