我在user
中有两个表userprofile
和MySQL
,我的网络服务器上有一个PHP脚本,用于处理将数据插入这些表格。
以下是用于定义表的SQL命令。
CREATE TABLE user (
USER_ID INT NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(20),
USER_PASSWORD VARCHAR(255),
PRIMARY KEY (USER_ID)
);
CREATE TABLE userprofile (
USER_ID INT NOT NULL,
FULL_NAME VARCHAR(255),
AGE INT,
FOREIGN KEY (USER_ID) REFERENCES user (USER_ID)
);
我能够使用PHP
为user
表成功写入数据库表,其中SQL
命令"INSERT INTO user (USERNAME, USER_PASSWORD) VALUES ('$username', '$hashedPassword')"
在PHP
内执行我定义的函数。
我现在遇到的问题是,我要说我需要添加用户的FULL_NAME
和AGE
等信息。由于我允许用户稍后包含此信息(由于用户隐私,它们是可选的)。如果没有userprofile
?
USER_ID
?
我查看了创建数据库表的文档,我相信我的定义是正确的。我最初的想法是实现一个函数来从数据库中获取当前用户的USER_ID
,然后使用它来将他们的数据插入到userprofile
表中。我想要的预期行为是在向用户添加上面的SQL
命令后,userprofile
也会创建一行,因为它是由外键USER_ID
链接的。我不确定如何保证这两个表彼此同步。
答案 0 :(得分:1)
要存储用户的姓名和年龄,必须拥有USER_ID
。这是因为您使用USER_ID
作为用户的唯一标识符,它是userprofile
表中的外键。
通常,当用户“登录” - 无论对您的网站意味着什么 - 您将确定他们的USER_ID
并将其用作会话变量(例如$_SESSION
中)以便您使用它在后续页面上(例如,他们编辑其个人资料的页面)。
关于同步:根据您的定义,您无需在userprofile
的同时向user
添加记录。你可以,但它实际上是空的,因为你还不知道他们的名字或年龄。
也就是说,您还需要检查他们的userprofile
是否已经存在。也就是说,您正在更新其个人资料或添加到其中。因此,在创建用户记录时创建用户配置文件记录会更简单。这样,你知道你总是在更新。
您应该在UNIQUE
架构中向USER_ID
添加userprofile
约束。这样,您就不会意外添加重复记录。