将可标记的人名合并到数据库中

时间:2014-05-17 17:50:13

标签: php mysql database-design database-schema

第一次发帖,第一次使用关系数据库,所以要温柔!

在相关小说小说的数据库上工作,我与责任人遇到了一些困难,例如作者或插图画家或前言作家。

我想把这些人存放在“人”中。 table,使用first_name和last_name,但是当用户向数据库输入新书时,我希望责任人的行为几乎与标签一样,出现自动完成列表,并允许他们进入新作者......一个字段,而不是两个字段。

此外,每个人都将具有与该书有关的角色。桌子上的人物角色是否有任何可怕的错误。使用' book_id',' person_id'和' role_id'?或者我应该把它分成两个表,' book-person'和#人物角色,'这个人物角色'表格链接到'书人的主要ID?表

1 个答案:

答案 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";
}