每个用户的数据库?或者每个人在同一个数据库中

时间:2013-11-03 10:12:41

标签: c# mysql .net

我正在C#中使用.net构建一个webApp,允许用户打开一些项目,并且在每个项目中,他们拥有的数据包括MYSQL中的地图和表格中的项目。 (每个人都有相同的表格)。 我想知道如何在两个选项之间构建sql结构: 1)每个注册到网站的人都会自己获得一个新的数据库。 2)每个人都会获得一个唯一的ID,表格中的每个项目都会有更多列的ID,我将只按ID选择这些项目。

什么会更有效?

2 个答案:

答案 0 :(得分:1)

正如其他回答者已经提到的那样,为每个用户创建数据库并不常见。但是直接将每个列添加到user_id可能也不是一个好主意。

理想情况下,您应该正确设计不同数据(用户,地图,案例中的项目)之间的关系,并使用正确的索引/键来设置灵活高效的架构。

示例设计可以是:

CREATE TABLE user (
 int id NOT NULL,
 .... // user data fields will come here...
 PRIMARY KEY(id)
) ENGINE = InnoDB;

CREATE TABLE map (
 int id NOT NULL,
 .... // map data fields will come here...
 PRIMARY KEY(id)
) ENGINE = InnoDB;

CREATE TABLE item (
 int id NOT NULL,
 .... // item data fields will come here...
 PRIMARY KEY(id)
) ENGINE = InnoDB;

CREATE TABLE map_has_item (
  int map_id NOT NULL,
  int item_id NOT NULL,
  PRIMARY KEY (map_id, item_id),
  FOREIGN KEY (map_id) REFERENCES map (id),
  FOREIGN KEY (item_id) REFERENCES item (id)
) ENGINE = InnoDB;

CREATE TABLE user_has_map (
  int user_id NOT NULL,
  int map_id NOT NULL,
  PRIMARY KEY (user_id, map_id),
  FOREIGN KEY (user_id) REFERENCES user (id),
  FOREIGN KEY (map_id) REFERENCES map (id)
) ENGINE = InnoDB;

上述设计将帮助您编写与您的应用程序相关的简单查询。使用上述索引的所有查询也会很快。

此外,它还具有足够的灵活性,可以添加潜在的功能。例如,如果其他用户可以为另一个用户的地图做出贡献,则可以向user_has_map表添加权限/角色列,并通过正确设置此列来添加新行。

可以改进上面定义的外键以确保数据完整性(在数据库上具有语义上正确的数据)。您可以设置ON DELETE和ON UPDATE触发器,以便在从数据库中删除地图或用户时简化清理。您可以通过以下链接了解有关外键的更多信息:

http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

Basics of Foreign Keys in MySQL?

答案 1 :(得分:0)

一个数据库。唯一ID。几乎每个存储过程或SQL语句都会包含“WHERE UniqueID =”。