第一次发帖,第一次使用关系数据库,所以要温柔!
在相关小说小说的数据库上工作,我与责任人遇到了一些困难,例如作者或插图画家或前言作家。
我想把这些人存放在“人”中。 table,使用first_name和last_name,但是当用户向数据库输入新书时,我希望责任人的行为几乎与标签一样,出现自动完成列表,并允许他们进入新作者......一个字段,而不是两个字段。
此外,每个人都将具有与该书有关的角色。桌子上的人物角色是否有任何可怕的错误。使用' book_id',' person_id'和' role_id'?或者我应该把它分成两个表,' book-person'和#人物角色,'这个人物角色'表格链接到'书人的主要ID?表
答案 0 :(得分:0)
首先是第二个问题:
此外,每个人都将具有与该书有关的角色。表'book-person-role'与'book_id','person_id'和'role_id'有什么特别的错误吗?
如果只有一个role_id连接到book_id和person_id,则可以使用一个表。连接表很慢,通常表格越少,工作得越快(如果其他一切都没有改变)。在这种特殊情况下,行数不会增加。所以拥有一张桌子并没有错,你甚至还有一个奖励:它的工作速度更快。
关于第一个问题。如果您与人有多对一的关系,那么您应该使用不同的书籍和人员表。您可以随意使用用户界面。您可以连接表,提出多个请求。您没有说明您正在使用哪种编程语言,因此我无法帮助您编写所需用户界面的代码。
编辑: 您建议将人员表(first_name和last_name作为不同字段)的方式是一种好方法。当您要查找某个人时,您对服务器进行了AJAX调用,服务器使用OR并返回列表。例如,您想在#name_input输入标记中找到一个名称。
HTML:
<input id="name_input" type='text' />
JavaScript的:
$(document).on('keydown','#name_input',function(){
var jqxhr = $.ajax( "name_lookup.php?name="+$("#name_input").val())
.done(function(data, textStatus, jqXHR) {
alert( "add data to your lookup list" );
})
.fail(function() {
alert( "error" );
})
});
PHP:
$name = mysql_real_escape_string($_GET['name']);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
if ($result = $mysqli->query(
"SELECT id, first_name, last_name FROM persons WHERE first_name = $name OR last_name = $name ORDER BY last_name"
)) {
$rows = array();
while($row = $result->fetch_assoc()) {
$rows[] = $row;
}
echo json_encode($rows);
}else{
echo "Error";
}