Em sala de aula, estamos todos 'estudando' bancos de dados e todos estão usando o Access. Entediado com isso, estou tentando fazer o que o resto da classe está fazendo, mas com comandos SQL brutos com MySQL em vez de usar o Access.
Já consegui criar bancos de dados e tabelas, mas agora como faço a relação entre duas tabelas?
Se eu tiver minhas duas tabelas como esta:
CREATE TABLE accounts(
account_id INT NOT NULL AUTO_INCREMENT,
customer_id INT( 4 ) NOT NULL ,
account_type ENUM( 'savings', 'credit' ) NOT NULL,
balance FLOAT( 9 ) NOT NULL,
PRIMARY KEY ( account_id )
)
e
CREATE TABLE customers(
customer_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
address VARCHAR(20) NOT NULL,
city VARCHAR(20) NOT NULL,
state VARCHAR(20) NOT NULL,
PRIMARY KEY ( customer_id )
)
Como faço para criar um 'relacionamento' entre as duas tabelas? Quero que cada conta seja 'atribuída' a um customer_id (para indicar quem é o proprietário).
mysql
sql
foreign-keys
relational-database
Josh Hunt
fonte
fonte
Respostas:
Se as tabelas forem innodb, você poderá criá-las assim:
Você deve especificar que as tabelas são innodb porque o mecanismo myisam não suporta chave estrangeira. Procure aqui para mais informações.
fonte
como ehogue disse, coloque isso em seu CREATE TABLE
alternativamente, se você já criou a tabela, use um comando ALTER TABLE:
Uma boa maneira de começar a aprender esses comandos é usando MySQL GUI Tools , que oferece uma interface mais "visual" para trabalhar com seu banco de dados. O verdadeiro benefício disso (em relação ao método do Access) é que, depois de projetar sua tabela por meio da GUI, ele mostra o SQL que será executado e, portanto, você pode aprender com isso.
fonte
Você tem que se perguntar se este é um relacionamento de 1 para 1 ou um de muitos relacionamento. Ou seja, cada conta tem um cliente e cada cliente tem uma conta. Ou haverá clientes sem contas. Sua pergunta implica o último.
Se você quiser ter um relacionamento estrito de 1 para 1, basta mesclar as duas tabelas.
No outro caso, a maneira correta de criar um relacionamento entre duas tabelas é criar uma tabela de relacionamento.
Então, se você tiver um customer_id e quiser as informações da conta, junte-se às contas dos clientes e contas:
Por causa da indexação, isso será incrivelmente rápido.
Você também pode criar uma VIEW que oferece o efeito da tabela combinada de contas de clientes, mantendo-as separadas
fonte
ca.
nãoac.
(3 lugares).PRIMARY KEY (customer_id, account_id)
sem vírgula depoisAdicionando ao comentário de ehogue, você deve fazer o tamanho das chaves em ambas as tabelas corresponder. Ao invés de
Faça
e certifique-se de que sua coluna int na tabela de clientes também seja int (10).
fonte
Certos motores MySQL suportam chaves estrangeiras. Por exemplo, InnoDB pode estabelecer restrições baseadas em chaves estrangeiras. Se você tentar excluir uma entrada em uma tabela que possui dependentes em outra, a exclusão falhará.
Se você estiver usando um tipo de tabela no MySQL, como MyISAM, que não suporta chaves estrangeiras, você não vincula as tabelas em qualquer lugar, exceto seus diagramas e consultas.
Por exemplo, em uma consulta, você vincula duas tabelas em uma instrução select com uma junção:
fonte
Aqui estão alguns recursos que o ajudarão a começar: http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase e http://code.tutsplus.com/articles/sql-for-beginners-part- 3 relacionamentos de banco de dados - net-8561
Além disso, como outros disseram, use uma GUI - tente baixar e instalar o Xampp (ou Wamp) que executa o software do servidor (Apache e mySQL) em seu computador. Então, quando você navegar para // localhost em um navegador, selecione PHPMyAdmin para começar a trabalhar com um banco de dados mySQL visualmente. Como mencionado acima, usei innoDB para permitir que você faça relacionamentos conforme solicitado. Facilita muito ver o que você está fazendo com as tabelas do banco de dados. Apenas lembre-se de PARAR os serviços Apache e mySQL quando terminar - eles podem abrir portas que podem expô-lo a ameaças de hackers / mal-intencionados.
fonte
Uma das regras que você deve saber é que a coluna da tabela à qual você deseja fazer referência deve ter o mesmo tipo de dados que A tabela de referência. 2 se você decidir usar o mysql, você terá que usar o InnoDB Engine porque de acordo com sua pergunta, esse é o mecanismo que suporta o que você deseja alcançar no mysql.
Abaixo está o código, tente embora as primeiras pessoas a responderem a essa pergunta, elas 100% forneceram ótimas respostas e, por favor, considere todas elas.
fonte
fonte