I have a table: all_info
, where it holds the users identification. The id
of this table can be of two types (just one or another, never both), suppose: int
and varchar
, but one table can't have two primary keys, and a composite one wouldn't solve my problem.
So, I can't do this:
+--------------------+
| all_info |
+--------------------+
| PK id1 varchar(50) |
| PK id2 int |
| ... |
+--------------------+
Then, I created two others tables: unique_info1
and unique_info2
with the primary keys of the types that I needed, add some informations for the specific types of users, and made relations with the table: all_info
, that holds the rest of the users informations (that both types share).
With this scheme, I could relate unique_info1
and unique_info2
with every other table, but I would need to create two columns in every one of them to establish that relationship. To solve this, I had created an artificial primary key in all_info
to make all posterior relationships.
Now, it looks like this:
Obs: FK uniq1_id varchar(50)
and FK uniq2_id int(10)
are unique and nullable.
+--------------------+ +--------------------+ +-------------------------+ +-------------------------+
| unique_info1 | | unique_info2 | | all_info | | other_table |
+--------------------+ +--------------------+ +-------------------------+ +-------------------------+
| PK id varchar(50) | | PK id int(10) | | PK id int(10) | | ... |
| ... | | ... | | ... | | ... |
| ... | | ... | | FK uniq1_id varchar(50) | | ... |
| ... | | ... | | FK uniq2_id int(10) | | FK all_id int(10) |
+--------------------+ +--------------------+ +-------------------------+ +-------------------------+
The thing is: that's the best approach, or should I change the plan?
For examples:
Choose other information to be the id of the users, where all will have the same type, and add all specific info of the users to that hole table?
- This would result in a lot of
null
columns for each user.
- This would result in a lot of
Create two completely different tables for the two types of users?
- This would result in redundant info.
NULL
fields are not evil.