我有以下数据库表。我试图找出一种方法,我可以构建这个,这样我就可以为每个玩家列提供一个位置。因为每个用户将拥有多个玩家并且将有多个用户,所以我无法找到建模我的数据库表以提高效率的最佳方法。
CREATE TABLE `user_players` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`firstname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`lastname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player1` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player2` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player3` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player4` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player5` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player6` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
我能想到的唯一一件事就是为玩家添加一个player_position,这样看起来就像这样......
`player1` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player_position1` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player2` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player_position2` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
有更好,更有效的方法吗?
答案 0 :(得分:3)
您需要为用户和玩家分别使用表格。播放器表将拥有拥有它的用户的外键。
答案 1 :(得分:1)
如果你想设计高效的数据库,那么我建议你先了解一些关于规范化的知识。
要了解规范化的基础知识,请参阅:
显然,您的数据库未规范化并需要规范化。
问题1: 通过分配Primary Key来实现第一个规范化表单。
问题2:
您的数据库包含Transitive Dependency (如果您将id
视为主键,则为传递依赖项。此后,player
字段将取决于非关键属性。即user_id
)
如果您解决了这两个问题,那么您将不再需要同时使用id
和user_id
。你可以放弃其中一个。
最终数据库架构:
CREATE TABLE `user` (
`user_id` int(11) NOT NULL PRIMARY KEY, /*Make it AUTO_INCREMENT if you wish to*/
`firstname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`lastname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(100) COLLATE utf8_unicode_ci NOT NULL
)
CREATE TABLE `player` (
`player_id` int(11) NOT NULL PRIMARY KEY, /*Make it AUTO_INCREMENT if you wish to*/
`player1` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player2` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player3` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player4` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player5` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`player6` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
FOREIGN KEY (user_id) REFERENCES user(user_id)
)
P.S。:语法可能因您使用的数据库类型而异。