好的,我不知道怎么把它放在一个句子里。我打算构建一个Web应用程序,让用户可以跟踪他们阅读的书籍。这些书在MySQL数据库的表中,以及默认设置为false的布尔列'is_complete'。当用户单击“已完成”时,该列中的值将设置为true。
我的问题是:这是否可以使用布尔列的单个书籍表?或者我是否必须为每个用户创建一个包含boolean列和外键(root.books)的表?完成这项工作的最佳方法是什么?我还在学习。
P.S。我正在使用Apache服务器,PHP和MySQL
答案 0 :(得分:0)
你需要书籍表和用户表和书籍book_users的id为book的书籍和用户的id is_completed(并且你不需要boolean is_completed)
答案 1 :(得分:0)
不可能。任何用户的数据库看起来都一样
您不必为每个用户创建一个表!那将是一个非常愚蠢的解决方案。
只需创建一个包含两列的表:用户ID和书籍ID以及正确的链接/连接/等。如果用户已经阅读了该书,请在此表中添加一行,其中包含相应的用户和书籍ID。要检查用户是否已阅读该书,只需在此新表中查找包含相应用户和书籍ID的行。如果表中有这样的行 - 用户已经完成了本书。如果不是 - 他没有。
由于行无法创建自己,默认值是他还没有读过这本书。通过删除该行,您还可以“更改用户的历史记录” - 这将标记该图书未被该用户完成。
答案 2 :(得分:0)
有些人很快就把你如何为此目的构建数据库的示例sql放在一起 - 尝试尽可能地规范化(我们可以进一步规范化阶段,但这需要另一个表,并且可能不值得为此示例)
你可以在你的gui中运行它,只要你还没有一个名为aphrodite
的数据库来观察你自己的结构。
bookworms
然后,当您需要查询特定图书,用户或发布者时,可以推导出以下内容:
drop database if exists `bookworms`;
create database if not exists `bookworms`;
use `bookworms`;
drop table if exists `publishers`;
create table if not exists `publishers` (
`pid` smallint(5) unsigned not null auto_increment,
`publisher` varchar(50) not null,
primary key (`pid`)
) engine=innodb default charset=utf8;
drop table if exists `books`;
create table if not exists `books` (
`bid` int(10) unsigned not null auto_increment,
`pid` smallint(5) unsigned not null default 1,
`title` varchar(50) not null default '0',
primary key (`bid`),
key `pid` (`pid`),
constraint `fk_pid` foreign key (`pid`) references `publishers` (`pid`) on delete cascade on update cascade
) engine=innodb default charset=utf8;
drop table if exists `users`;
create table if not exists `users` (
`uid` int(10) unsigned not null auto_increment,
`username` varchar(50) not null default '0',
primary key (`uid`)
) engine=innodb default charset=utf8;
drop table if exists `library`;
create table if not exists `library` (
`id` int(10) unsigned not null auto_increment,
`uid` int(10) unsigned not null default '0',
`bid` int(10) unsigned not null default '0',
`status` tinyint(3) unsigned not null default '0' comment 'indicates if the book has been read',
primary key (`id`),
key `uid` (`uid`),
key `bid` (`bid`),
constraint `fk_bid` foreign key (`bid`) references `books` (`bid`) on delete cascade on update cascade,
constraint `fk_uid` foreign key (`uid`) references `users` (`uid`) on delete cascade on update cascade
) engine=innodb default charset=utf8;
insert into `publishers` (`pid`, `publisher`) values
(1, 'unknown'),
(2, 'penguin'),
(3, 'faber cassell'),
(4, 'domino'),
(5, 'unknown');
insert into `books` (`bid`, `pid`, `title`) values
(1, 1, 'miss piggy got caught shoplifting'),
(2, 2, 'my life on crack by kermit the frog');
insert into `users` (`uid`, `username`) values
(1, 'joe bloggs'),
(2, 'fred smith'),
(3, 'john doe');
insert into `library` (`id`, `uid`, `bid`, `status`) values
(1, 1, 1, 1),
(2, 2, 2, 1);
答案 3 :(得分:-2)