Sql 数据库设计与主键组合

Sql 数据库设计与主键组合,sql,database,ms-access,Sql,Database,Ms Access,我有一张名为minibar_bill的表格,我用它来保存客户支出的证据。我正在尝试建立一个酒店/养老金管理系统 我想我可以做一张桌子 迷你吧账单(id账单、id迷你吧产品、id客户) 我想把这些信息添加到基于账单id的发票上 我该怎么做 我的意思是我想要这样的东西: Id_bill(1) id_minibar_product(1,2,3) id_client(123) 因此,前3条记录将是: 1, 1, 123 1, 2, 123 1, 3, 123 我想把身份证账单写在发票上。。。也许我可

我有一张名为minibar_bill的表格,我用它来保存客户支出的证据。我正在尝试建立一个酒店/养老金管理系统

我想我可以做一张桌子

迷你吧账单(id账单、id迷你吧产品、id客户)

我想把这些信息添加到基于账单id的发票上

我该怎么做

我的意思是我想要这样的东西:

Id_bill(1)
id_minibar_product(1,2,3)
id_client(123)
因此,前3条记录将是:

1, 1, 123
1, 2, 123
1, 3, 123
我想把身份证账单写在发票上。。。也许我可以把id\U产品换成id\U账单

其中id_bill(1)-将是数据库中的第一个bill记录 id_minibar_产品(1,2,3)-将是客户已消费的产品1,2,3 id#u client(123)-我们在发票上使用的客户id,用于从客户表收集数据,以便在发票上打印数据(我将使用C#作为UI)

我所尝试的:


我曾尝试使用字段id\u bill和id\u product创建db,但我认为这是一种错误的方法,因为我将它们设置为组合主键,并且无法将它们添加到发票表中的外键中。

以下是一些设计建议:

用描述性的方式来命名是个好主意,但是如果你创建一个名为
迷你吧账单
的表格,如果你想开始向房间内的电影、房间内的餐饮、服务等收费,那将是不一致和短视的。我建议您将其称为更通用的名称—从所有表名中删除Minibar

决不能将逗号分隔的值放入单个字段中

网上有一百万个销售数据模型,包括MS Access中的模板(如前所述)。重新发明轮子是没有意义的

我建议你吃这样的东西

Client                  A list of clients
Products                A list of products you can be billed for (not just minibar)
Bill                    A client has zero or more bills (usually one)
BillLine                A bill has zero ore more lines. Each line represents 
                        One product being charged for on a bll
因此,
Bill
是标题。这取决于您是否添加一列,指示何时/是否开具发票、付款等,或者是否要创建单独的发票模块

关于这一评论:

我希望将发票链接到minibar_账单,以便在客户购买的minibar所有产品的单个发票上显示状态

如果您有单独的发票表,您可以将
BillID
写入其中以链接它


我不确定您是否了解所有这些信息都存在于不同的表中,例如,当您打印发票时,您会在当时从表中收集所有信息

你在这里犯了几乎所有可能的设计错误。看看这个:。如果你还在,不要放弃这个问题,我会给出一个解释一些设计问题的答案here@Nick.McDermaid我看了一下那个。。。问题是我没有找到一个更好的设计方案。。。即使我发布了我的表名,它们也是用罗马尼亚语写的。。。你不会很明白。。。我面临的问题是,我有以下表格发票、房间、迷你吧、迷你吧账单和迷你吧产品。我希望的是将发票链接到minibar_bill,以便在一张发票上显示客户购买的minibar所有产品的状态……如果您有兴趣在google中学习搜索“ms access中的发票”,有大量的示例和教程可以帮助您。这里有一个: