将数据限制到数据库中的一个表是更快还是更少的内存?

时间:2018-07-23 01:53:32

标签: sql database sqlite database-design

SQL数据库通常由表组织。这些表具有存储信息的列和行。与只使用一个表相比,在一个表之间进行更改要花费更多的时间吗?我正在考虑将每个用户存储为不同的表。数据库中不会有太多用户。将会有一个密码列和一个其所有拥有的设备的列。这是不好的做法吗?另外:我应该怎么做呢?

可能的重复项:A seperate table for the posts which each user has liked - practical or not?

原因不符合我的需求:我不知道自己在做什么。

Proposed database design          Traditional database design

Table: username123                 Table: login (only one table)
Password:       Appliances:        User:    Password:  Appliance1 ...
-----           -----              -----    -----      -----
-----           -----              -----    -----      -----
-----           -----              -----    -----      -----
        ...                                  ...

2 个答案:

答案 0 :(得分:1)

请勿将每个用户存储为不同的表!这是维护的噩梦,并且会损害性能。

您不能:

  • 轻松查询所有用户。
  • 设置外键关系。
  • 修改用户表。
  • 使用索引轻松优化。
  • 列表继续。

由于SQL的底层结构,通常将数据放入一个大表中而不是成千上万个小表中更为有效。

您有一个名为users的实体。您应该有一个表来表示该实体。

答案 1 :(得分:0)

该表或一组相关表用于表示通常是逻辑的实体。该实体的不同成员,例如在这种情况下,不同的用户总是将这些用户作为数据行垂直存储在表中。拥有一个以上的表不是用于存储实体的成员,而是用于存储实体的超过1个项目的上限的部分。也就是说,用户(1个项目)必须存储在1个表中,例如用户,但用户电话号码可能超出每个用户1个项目的限制,最好将其存储在名为UsersPhoneNums的第二个表中,该表与表Users相关为Users.PrimaryID = UserPhoneNums.UsersPrimaryID(外键约束-中的任何行UsersPhoneNums(任何电话号码)都属于Users(用户)中的一行。如果不使用UsersPhoneNums表,则必须预设每个用户的电话号码数量(例如,家庭,公司和移动电话仅3个),并在表Users(例如WorkPhone,HomePhone和MobilePhone)中添加3列。