Php 哪种数据库类型适合阵列?

Php 哪种数据库类型适合阵列?,php,database,database-design,database-connection,Php,Database,Database Design,Database Connection,我希望我的数据库能够支持一家拥有多个用户的公司。我如何做到这一点?示例users table(UID、username、password)公司table(CID、companyname、usersthattheownerofthecompany)?我该怎么办?我是否应该在php中创建一个类似12414234123*uid的数组,该数组将插入到公司行的UserSthatIstheOwner上?或者有更好的主意吗?如果你想让每个用户都有一个(而不是更多)公司,你应该: 用户表格 uid 用户名

我希望我的数据库能够支持一家拥有多个用户的公司。我如何做到这一点?
示例

users table(UID、username、password)
公司table(CID、companyname、usersthattheownerofthecompany)

?我该怎么办?我是否应该在php中创建一个类似12414234123*uid的数组,该数组将插入到公司行的UserSthatIstheOwner上?或者有更好的主意吗?

如果你想让每个用户都有一个(而不是更多)公司,你应该:

  • 用户
    表格
    • uid
    • 用户名
    • 公司id
  • 公司
    表格
    • 公司id
    • 公司名称
然后,
user.company\u id
将是一个,它引用了
company.company\u id

然后,您存储:

  • 每个用户在
    user
    中有一行
    • 引用该用户的正确公司的id
    • 这是
      company
      表中右行的
      company\u id
  • 公司
公司表中没有存储用户的相关信息——当每个用户“指向”一个公司时,一个公司可以有多个用户


像您建议的那样将数据存储为数组肯定不是一个好主意——只是关系数据库的工作方式不同


如果每个用户可以有多个公司,并且每个公司可以有多个用户,则必须添加第三个表(a),该表将为每个用户指明他们所属的公司:

  • 用户
    表格
    • uid
    • 用户名
  • 公司
    表格
    • 公司id
    • 公司名称
  • 用户/公司
    表格
    • uid
    • 公司id
在这种情况下,
company
表中没有与用户相关的内容,而
user
表中也没有与公司相关的内容:这些内容之间的链接位于
user\u company
表中


当然,
user\u company.uid
将是
user.uid
的外键;和
user\u company.company\u id
将是
company.company\u id

的外键。有一个更好的主意-它被称为跨表联接。您要做的是创建第三个表,其中包含两列。在这两列中,存储要相互连接的表的主键

这样做的目的是在公司和用户之间建立一种关系。在关系数据库中,表之间的关系通过使用外键来表示


当然,这仅适用于将多个用户连接到多个公司(“M-N”关系)的情况。如果要将多个用户连接到一个公司,只需为用户添加一列公司id即可。

任何关系数据库都是一种好方法。看看或。

pascal你什么时候睡觉?呵呵,回答得很好。多对多怎么样?@亚当:现在这里是下午5:30,所以不是睡觉的时间;-);;;对于多对多部分,您必须使用联接表,如我回答的第二部分所述(我已对其进行了编辑,因此您可能在发表评论之前没有看到该部分),“级联”操作可以由数据库服务器完成(但取决于服务器);但我更喜欢自己在应用程序的代码中这样做,而不是使用DB引擎的那个特性;这样,我就知道更新/删除了什么;;;cascade与多对多没有多大关系:多对多意味着每个用户可以有几个公司,每个公司可以有几个用户。顺便问一下,在user_company中,哪一个是PK?公司id?uid?还是没有PK?PK已经是独一无二的了吗?或者我们最好将UQ放在PK上?PK是一行的标识符;所以,它必须是独一无二的;;在用户单位中,标识为用户/单位对;因此,主键将位于这两个字段上(一个索引中可以有多个字段;PK是一种特定的索引)。在数据库中的一个字段中存储数组是一种糟糕的做法。这使得查询数据变得更加困难。