diff --git a/sql/database-create.sql b/sql/database-create.sql
index 0e6ce812800b332d8ecfa188b3b1a024921bb61d..638946772cb981a55bb160487c7da15a007984ee 100644
--- a/sql/database-create.sql
+++ b/sql/database-create.sql
@@ -766,8 +766,8 @@ CREATE TABLE linkdelays (
 
 CREATE TABLE location_info (
   node_id varchar(32) NOT NULL default '',
-  floor varchar(32) default NULL,
-  building varchar(32) default NULL,
+  floor varchar(32) NOT NULL default '',
+  building varchar(32) NOT NULL default '',
   loc_x int(10) unsigned NOT NULL default '0',
   loc_y int(10) unsigned NOT NULL default '0',
   loc_z float default NULL,
@@ -776,7 +776,7 @@ CREATE TABLE location_info (
   phone tinytext,
   room varchar(32) default NULL,
   stamp int(10) unsigned default NULL,
-  PRIMARY KEY  (node_id)
+  PRIMARY KEY  (node_id,building,floor)
 ) TYPE=MyISAM;
 
 --
diff --git a/sql/database-migrate.txt b/sql/database-migrate.txt
index dcee3a669a56458cd0fa34fa5a731d727dfffc59..cdcb4d612d1c7774b55048aa76fcef64725be335 100644
--- a/sql/database-migrate.txt
+++ b/sql/database-migrate.txt
@@ -2598,3 +2598,13 @@ last_net_act,last_cpu_act,last_ext_act);
        used to set an ID for the programmed mote.
 
         alter table virt_nodes add column numeric_id int default NULL;
+
+1.331: Change location_info to include building and floor in the
+       primary key.
+
+	alter table location_info change floor floor varchar(32) \
+	      NOT NULL default '';
+	alter table location_info change building building varchar(32) \
+	      NOT NULL default '';
+	alter table location_info drop primary key;
+	alter table location_info add primary key(node_id,building,floor);